// app.js
App({
  onLaunch() {
    if (!wx.canIUse('channel-video')) {
      //  如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
      wx.showModal({
        title: '提示',
        content: '当前微信版本过低，请升级到最新微信版本后重试。'
      })
    }
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager()
      updateManager.onCheckForUpdate(function (res) {
        // 请求完新版本信息的回调
        if (res.hasUpdate) {
          updateManager.onUpdateReady(function () {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好，是否重启应用？',
              success: function (res) {
                if (res.confirm) {
                  // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                  updateManager.applyUpdate()
                }
              }
            })
          })
          updateManager.onUpdateFailed(function () {
            // 新的版本下载失败
            wx.showModal({
              title: '已经更新新版本',
              content: '新版本已经上线，请您删除当前小程序，重新搜索打开',
            })
          })
        }
      })
    } else {
      //  如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
      // wx.showModal({
      //   title: '提示',
      //   content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
      // })
    }
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    if (wx.getStorageSync(this.globalData.miniProgramtype+'access_token')=='') {
      this.wxlogin()
    }

    // 根据不同版本赋予不同缓存标识
    var now_version = __wxConfig.envVersion
    switch (now_version) {
      case 'develop':
        console.log('开发版');
        this.globalData.miniProgramtype='develop-'
        break;
      case 'trial':
        console.log('体验版');
        this.globalData.miniProgramtype='trial-'
        break;
      case 'release':
        console.log('正式版');
        this.globalData.miniProgramtype='release-'
        break;
    }
    // 判断用户状态
    this.disabletime()
  },
  // 解决异步--未加载token请求接口 配合页面 app.wxlogin().then(()=>{})使用  因为没有把所有的页面都写then方法 所以在onLaunch中也调用了一次此方法 导致部分页面会加载两次登录获取token接口 所以的所以写了定时器防抖
  wxlogin() {
    var that = this
    return new Promise((resolve,reject)=>{
        // 防抖
        clearTimeout(that.globalData.time) 
        that.globalData.time = setTimeout(()=>{
          wx.login({
            success: (res)=>{
              if (res.code) {
                var arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
                wx.request({
                  //后台接口地址
                  url: that.globalData.url+'/login/wxLogin',
                  data: {
                    code: res.code,
                    head_img: that.globalData.richimgurl+'storage/logo.png',
                    nickname: '微信用户'+Math.floor(Math.random()*(9999-1000))+arr[Math.floor(Math.random()*26)]
                  },
                  method: 'post',
                  header: {
                    'content-type': 'application/json'
                  },
                  success: function (res) {
                    // 存储token
                    wx.setStorageSync(that.globalData.miniProgramtype+'access_token',res.data.data.token)
                    // 授权手机号
                    wx.setStorageSync(that.globalData.miniProgramtype+'is_bind_phone',res.data.data.is_bind_phone)
                    // that.globalData.is_bind_phone = res.data.data.is_bind_phone
                    // 是否为首次登录
                    that.globalData.first_login = res.data.data.first_login
                      // 首次登录跳转xwebview
                    if (res.data.data.first_login == 1) {
                      wx.navigateTo({
                        url: '/pages/xwebview/xwebview',
                      })
                    }

                    // 用户登录获取积分
                    wx.request({
                      //后台接口地址
                      url: that.globalData.url+'/UserIntegral/AddIntegral',
                      data: {
                        type: 1
                      },
                      method: 'post',
                      header: {
                          'content-type': 'application/json',
                          'Authorization': wx.getStorageSync(that.globalData.miniProgramtype+'access_token')
                      },
                      success: function (res) {
                      }, fail: function (err) {}
                    })
                    resolve(res)
                  }, fail: function (err) {
                    reject(err);
                  }
                })
              }
            }
          })
        },200)
    })
  },
  // 判断用户状态
  disabletime() {
    var that = this
    that.globalData.disabletime = setInterval(() => {
      if (that.globalData.disabletime == '') {
        return
      }
      if (wx.getStorageSync(that.globalData.miniProgramtype+'access_token')!='') {
        wx.request({
          url: that.globalData.url+'/index/userState',
          data: {},
          method: 'post',
          header: {
              'content-type': 'application/json',
              'Authorization': wx.getStorageSync(that.globalData.miniProgramtype+'access_token')
          },
          success: function (res) {
            if (res.data.code == 200) {
              if (res.data.data.state === 1) {
                that.globalData.disabletype = false
                clearInterval(that.globalData.disabletime)
                wx.showToast({
                  title: '账号已被禁用',
                  icon: 'none',
                  duration: 1500
                })
                setTimeout(() => {
                  // 如果不给值会在必须需要token再去请求数据的页面请求登录接口
                  wx.setStorageSync(that.globalData.miniProgramtype+'access_token','null')
                  // wx.setStorageSync(that.globalData.miniProgramtype+'is_bind_phone','null')
                  wx.switchTab({
                    url: '/pages/home/home',
                  })
                }, 1000)
              } else {
                that.globalData.disabletype = true
              }
            }
          }, fail: function (err) {
            reject(err);
          }
        })
      }
    }, 5000);
  },
  // 监听全局变量变化
  watch: function (variate, method) {
    var obj = this.globalData;
    let val = obj[variate];// 单独变量来存储原来的值
    Object.defineProperty(obj, variate, {
      configurable: false,
      enumerable: true,
      set: function (value) {
        val = value;// 重新赋值
        method(variate,value);// 执行回调方法
      },
      get: function () {
        // 在其他界面调用getApp().globalData.variate的时候，这里就会执行。
        return val; // 返回当前值
      }
    })
  },
  globalData: {
    statusBarHeight: wx.getSystemInfoSync()['statusBarHeight'],
    url: 'https://bjyxxf.com'+'/api_record', // 接口请求地址
    richimgurl: 'https://bjyxxf.com/', // 富文本图片请求地址
    miniProgramtype: '', // 缓存标识
    time: '', // token防抖定时器
    disabletype: true, // 账号状态
    disabletime: '', // 账号状态定时器
    first_login: '', // 是否为首次登录
    // is_bind_phone: '' // 是否授权手机号
  }
})
